SQL dotaz bez SUBSELECT

Otázka od: Miroslav Evjak

17. 9. 2002 18:46

Ahoj,

mam tabulku SKOLENI (id, nazev), LIDI (id, jmeno, prijmeni) a
REGISTRACE(skoleni_id, lidi_id).

a) Potrebuju vypsat seznam skoleni, na kterych je dany clovek
zaregistrovany - to neni problem:

<SQL>
SELECT id, nazev, lidi_id
FROM skoleni, registrace
WHERE skoleni.id=registrace.skoleni_id
AND registrace.lidi_id='JaPe'
</SQL>

b) Potrebuju vypsat seznam skoleni, na kterych NENI dany clovek
zaregistrovany:

<SQL>
SELECT * FROM skoleni
WHERE skoleni.id NOT IN
(SELECT skoleni_id FROM registrace WHERE registrace.lidi_id='JaPe')
</SQL>


Problem je, ze nemohu pouzit SUBSELECT (NOT IN, EXIST), protoze MySQL to
neumi.
Da se to nejak obejit ? Dik za radu.

Mirecek
+420 (607) 875748
mailto:miroslav.evjak@seznam.cz
http://www.sweb.cz/miroslav.evjak/


---
Odchozí zpráva neobsahuje viry.
Zkontrolováno antivirovým systémem AVG (http://www.grisoft.cz).
Verze: 6.0.385 / Virová báze: 217 - datum vydání: 04.09.2002

Odpovedá: Ludek Finstrle

20. 9. 2002 16:59

> mam tabulku SKOLENI (id, nazev), LIDI (id, jmeno, prijmeni) a
> REGISTRACE(skoleni_id, lidi_id).
>
> a) Potrebuju vypsat seznam skoleni, na kterych je dany clovek
> zaregistrovany - to neni problem:
>
> <SQL>
> SELECT id, nazev, lidi_id
> FROM skoleni, registrace
> WHERE skoleni.id=registrace.skoleni_id
> AND registrace.lidi_id='JaPe'
> </SQL>
>
> b) Potrebuju vypsat seznam skoleni, na kterych NENI dany clovek
> zaregistrovany:
>
> <SQL>
> SELECT * FROM skoleni
> WHERE skoleni.id NOT IN
> (SELECT skoleni_id FROM registrace WHERE registrace.lidi_id='JaPe')
> </SQL>
>
>
> Problem je, ze nemohu pouzit SUBSELECT (NOT IN, EXIST), protoze MySQL to
> neumi.
> Da se to nejak obejit ? Dik za radu.

Pouzijte OUTER JOIN a testujte spravny sloupec na NULL.

SELECT * FROM skoleni LEFT OUTER JOIN registrace
    ON (skoleni.id = registrace.skoleni_id)
  WHERE registrace.skoleni_id = NULL;

Nerucim za 100% syntaktickou spravnost. Ale logicky by to melo byt ok.

S pozdravem

Luf